﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIGEB.Modelo.moduloPerfiles;
using SIGEB.Modelo.moduloMultas;
using SIGEB.Modelo.moduloUsuarios;
using SIGEB.Modelo.moduloDocumentos;
using SIGEB.Modelo.moduloEjemplar;

namespace SIGEB.Prototipo.Control
{
    public class controlMultas
    {
        #region "constructores"
        
        public controlMultas(controlPrincipal cp)
        {
            this.cp = cp;
        }

        #endregion

        internal void procesarMulta(string idEjemplar, string idUsuario)
        {
            if (!cp.usuarioActualPuede(acciones.MULTAS_PROCESAR))
            {
                cp.ExcepcionUsrSinPermisos();
            }
            cp.datos.multas.eliminarmulta(idUsuario, idEjemplar);  
        }

        internal LinkedList<multa> obtenerMultas()
        {
            if (!cp.usuarioActualPuede(acciones.MULTAS_CONSULTA_TOD))
            {
                if (cp.usuarioActualPuede(acciones.MULTAS_CONSULTA_ACT))
                {
                    return cp.datos.multas.obtenermultaUsuario(cp.UsuarioActual);
                }
                else
                {
                    return new LinkedList<multa>();
                }
            }
            return cp.datos.multas.obtenermultas();
        }

        internal LinkedList<multa> obtenerMultasUsuario(string idUsuario)
        {
            if (!cp.usuarioActualPuede(acciones.MULTAS_CONSULTA_TOD))
            {
                if (!cp.usuarioActualPuede(acciones.MULTAS_CONSULTA_ACT) || cp.UsuarioActual != idUsuario)
                {
                    return new LinkedList<multa>();
                }
            }
            return cp.datos.multas.obtenermultaUsuario(idUsuario);
        }

        internal LinkedList<usuario> obtenerUsuarios()
        {
            LinkedList<usuario> nueva = new LinkedList<usuario>();
            if (cp.usuarioActualPuede(acciones.MULTAS_CONSULTA_TOD))
            {
                return cp.datos.usuarios.obtenerTodos();
            }
            else if (cp.usuarioActualPuede(acciones.MULTAS_CONSULTA_ACT))
            {
                nueva.AddLast(cp.usuarioActual());
            }
            return nueva;
        }

        internal documento documentoByEjemplar(string idEjemplar)
        {
            if (!string.IsNullOrEmpty(idEjemplar))
            {
                ejemplar nuevo = cp.datos.ejemplares.obtenerejemplar(idEjemplar);
                if (nuevo != null)
                {
                    return cp.datos.documentos.obtenerDocumento(nuevo.idDocumento);
                }
            }
            return null;
        }

        internal static multa buscarMultas(LinkedList<multa> lista, string user, string adq)
        {
            if (lista != null && !string.IsNullOrEmpty(user) && !string.IsNullOrEmpty(adq))
            {
                foreach (multa act in lista)
                {
                    if (act.ejemplar == adq && act.usuario == user)
                    {
                        return act;
                    }
                }
            }
            return null;
        }

        #region "atributos"

        controlPrincipal cp;

        #endregion
    }
}
